package org.topic.user;

import org.topic.surpermarket.Product;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * 购物车类
 * 负责管理用户购买商品及其数量
 */
public class ShoopingCart {

    private Map<Product, Integer> items = new HashMap<>(); // 购买的商品及其对应数量

    /**
     * 添加商品到购物车
     * @param product 要添加的商品
     * @param quantity 商品数量
     */
    public void addItem(Product product, int quantity) {
        if (product == null) {
            throw new IllegalArgumentException("商品不能为null");
        }
        if (quantity < 0) {
            throw new IllegalArgumentException("商品数量必须大于0");
        }

        items.merge(product, quantity, Integer::sum);
    }

    /**
     * 清空购物车
     */
    public void clear() {
        items.clear();
    }

    /**
     * 从购物车移除商品
     * @param product 要移除的商品
     */
    public void removeItem(Product product) {
        if (product == null) {
            throw new IllegalArgumentException("商品不能为null");
        }
        items.remove(product);
    }

    /**
     * 获取购物车中所有商品及其数量
     * @return 不可修改的商品-数量映射
     */
    public Map<Product, Integer> getItems() {
        return new HashMap<>(items);
    }

    /**
     * 计算购物车中商品小计（不含折扣）
     * @return
     */
    public BigDecimal calculateSubtotal() {
        return items.entrySet().stream().map(entry -> {
            Product product = entry.getKey();
            int quantity = entry.getValue();
            return product.getPrice().multiply(BigDecimal.valueOf(quantity));
        }).reduce(BigDecimal.ZERO, BigDecimal::add);
    }
}
